package com.iflytek.jcy.supervise.job.component.httpinterface;

import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.dtflys.forest.annotation.Get;
import com.dtflys.forest.annotation.JSONBody;
import com.dtflys.forest.annotation.Post;
import com.dtflys.forest.annotation.Query;
import com.dtflys.forest.annotation.Retry;
import com.dtflys.forest.annotation.Var;
import com.github.pagehelper.PageInfo;
import com.iflytek.jcy.supervise.job.component.httpinterface.uap.req.TokenDto;
import com.iflytek.sec.uap.dto.ResponseDto;
import com.iflytek.sec.uap.dto.authority.AuthorityQueryDto;
import com.iflytek.sec.uap.dto.organization.OrgExtendDto;
import com.iflytek.sec.uap.dto.organization.OrgExtendImportDto;
import com.iflytek.sec.uap.dto.resource.ResourceDtoWithAuthority;
import com.iflytek.sec.uap.dto.role.BindRoleListToUserDto;
import com.iflytek.sec.uap.dto.user.BatchSaveUserDto;
import com.iflytek.sec.uap.dto.validate.ValidateUserDto;
import com.iflytek.sec.uap.model.UapAuthority;
import com.iflytek.sec.uap.model.UapTokenModel;
import com.iflytek.sec.uap.model.UapUser;
import com.iflytek.sec.uap.model.UapUserOrgDetail;

/** <br>
 * 标题:uap相关服务 <br>
 * 描述: <br>
 * 公司: www.iflytek.com<br>
 * 
 * @autho dgyu
 * @time 2022年12月15日 上午10:49:58 */
public interface UapServiceHttpInterface {

	/** <br>
	 * 适用场景:获取临时token <br>
	 * 调用方式: <br>
	 * 业务逻辑说明<br>
	 *
	 * @param tokenDto
	 * @return
	 * @autho dgyu
	 * @time 2022年12月13日 下午4:26:26 */
	@Post("#{uap.rest-server-url}#{uap.getToken}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<UapTokenModel> getToken(@JSONBody TokenDto tokenDto);

	/** <br>
	 * 适用场景:获取功能权限 <br>
	 * 调用方式: <br>
	 * 业务逻辑说明<br>
	 *
	 * @param authorityQueryDto
	 * @param token
	 * @return
	 * @autho dgyu
	 * @time 2022年12月13日 下午4:26:41 */
	@Post("#{uap.rest-server-url}#{uap.getAuthorityList}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<PageInfo<UapAuthority>> getAuthorityList(@JSONBody AuthorityQueryDto authorityQueryDto, @Query("token") String token);

	/***
	 * @description  据appId和userId查询用户权限关联的资源列表
	 * @author  dgyu
	 * @date    2022/12/16 15:16
	 * @param	appId
	 * @param	userId
	 * @param	token
	 * @return  com.iflytek.sec.uap.dto.ResponseDto<java.util.List<com.iflytek.sec.uap.dto.resource.ResourceDtoWithAuthority>>
	*/
	@Get("#{uap.rest-server-url}#{uap.getAuthResByAppIdUserId}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<List<ResourceDtoWithAuthority>> getAuthResByAppIdUserId(@Query("appId") String appId, @Query("userId") String userId, @Query("token") String token);

	/** <br>
	 * 适用场景:用户验证：使用用户名、密码 <br>
	 * 调用方式: <br>
	 * 业务逻辑说明<br>
	 *
	 * @param validateUserDto
	 * @param token
	 * @return
	 * @autho dgyu
	 * @time 2022年12月13日 下午4:27:19 */
	@Post("#{uap.rest-server-url}#{uap.validateUser}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<UapUser> validateUser(@JSONBody ValidateUserDto validateUserDto, @Query("token") String token);

	/** <br>
	 * 适用场景:根据应用编码查询应用基本信息 <br>
	 * 调用方式: <br>
	 * 业务逻辑说明<br>
	 *
	 * @param appCode
	 * @param token
	 * @return
	 * @autho dgyu
	 * @time 2022年12月13日 下午4:27:57 */
	@Get("#{uap.rest-server-url}#{uap.getAppByCode}/{appCode}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<JSONObject> getAppByCode(@Var("appCode") String appCode, @Query("token") String token);

	/** <br>
	 * 适用场景:根据userId查询用户基本信息 <br>
	 * 调用方式: <br>
	 * 业务逻辑说明<br>
	 *
	 * @param userId
	 * @param token
	 * @return
	 * @autho dgyu
	 * @time 2022年12月13日 下午4:28:16 */
	@Get("#{uap.rest-server-url}#{uap.getUserDetail}{userId}#{uap.getUserDetailOrg}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<UapUserOrgDetail> getUserDetail(@Var("userId") String userId, @Query("token") String token);

	/** <br>
	 * 适用场景:根据用户名查询用户基本信息（2.0跳转） <br>
	 * 调用方式: <br>
	 * 业务逻辑说明<br>
	 *
	 * @param loginName
	 * @param token
	 * @return
	 * @autho dgyu
	 * @time 2022年12月13日 下午4:28:36 */
	@Get("#{uap.rest-server-url}#{uap.getUserDetailByLoginName}{loginName}#{uap.getUserDetailSystem}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<BatchSaveUserDto> getUserDetailByLoginName(@Var("loginName") String loginName, @Query("token") String token);
	/**
	 * 
	 * <br>
	 * 适用场景:批量保存组织机构信息	<br>
	 * 调用方式:	<br>
	 * 业务逻辑说明<br>
	 *
	 * @param token
	 * @return
	 * @autho dgyu
	 * @time 2022年12月15日 上午11:08:20
	 */
	@Post("#{uap.rest-server-url}#{uap.batchSaveOrg}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<JSONObject> batchSaveOrg(@JSONBody List<OrgExtendImportDto>  orgExtendImportDtoList, @Query("token") String token);
	/**
	 * 
	 * <br>
	 * 适用场景:批量导入用户信息	<br>
	 * 调用方式:	<br>
	 * 业务逻辑说明<br>
	 *
	 * @param BatchSaveUserDto
	 * @return
	 * @autho dgyu
	 * @time 2022年12月15日 上午11:08:36
	 */
	@Post("#{uap.rest-server-url}#{uap.batchRegister}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<JSONObject> batchRegister(@JSONBody List<BatchSaveUserDto>  BatchSaveUserDto, @Query("token") String token);

    /***
     * @description  根据机构编码查询机构信息，code用逗号分隔
     * @author  dgyu
     * @date    2022/12/16 15:15
     * @param	codes
     * @param	token
     * @return  com.iflytek.sec.uap.dto.ResponseDto<java.util.List<com.iflytek.sec.uap.dto.organization.OrgExtendDto>>
    */
	@Get("#{uap.rest-server-url}#{uap.getByCodes}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<List<OrgExtendDto>> getByCodes(@Query("codes") String codes, @Query("token") String token);

    /***
     * @description  给用户绑定默认角色
     * @author  dgyu
     * @date    2022/12/16 15:16
     * @param	bindRoleListToUserDto
     * @param	token
     * @return  com.iflytek.sec.uap.dto.ResponseDto<com.alibaba.fastjson.JSONObject>
    */
	@Post("#{uap.rest-server-url}#{uap.bindRole}")
	@Retry(maxRetryCount = "3", maxRetryInterval = "100")
	ResponseDto<JSONObject> bindRole(@JSONBody BindRoleListToUserDto bindRoleListToUserDto, @Query("token") String token);


}
